﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using System.Xml;

namespace GameVLTK
{
    public class MainMenu : Menu
    {

        //Chỉ số của Button được chọn
        private int Id;

        /// <summary>
        /// Hàm khởi tạo danh sách các button có trong Main Menu
        /// </summary>
        /// <param name="content"></param>
        /// <param name="doc"></param>
        public MainMenu(ContentManager content, XmlDocument doc)
        {
            this.Controls = new List<Control>();
         
            XmlNode nForm = doc.DocumentElement;

            //Lấy đường dẫn chứa các ảnh 
            String pathImages = nForm.Attributes["Path-Images"].Value;

            //Trả về danh sách các button trong Main Menu
            XmlNodeList nlButtons = doc.SelectNodes("//BUTTON");

            for (int i = 0; i < nlButtons.Count; i++)
            {
                XmlNode nButton = nlButtons[i];

                //Tên prefix của button
                string prefix = nButton.Attributes["Prefix"].Value;

                //Số lượng texture
                int nTexures = int.Parse(nButton.Attributes["So_Luong"].Value);

                //Tạo độ của button
                int X = int.Parse(nButton.Attributes["X"].Value);
                int Y = int.Parse(nButton.Attributes["Y"].Value);

                //Khởi tạo button
                Button btnMenuItem = new Button(content, pathImages + prefix,
                                             nTexures, new Vector2(X, Y),prefix);

                //Add button
                this.Controls.Add(btnMenuItem);

            }

           
        }

        /// <summary>
        /// 
        /// </summary>
      
        public override void Update(GameTime gameTime)
        {
            this.CheckMouseState();

            this.Controls[this.Id].Update(gameTime);
        }

        /// <summary>
        /// 
        /// </summary>
        public void CheckMouseState()
        {
            MouseState mouseState = Mouse.GetState();
            for (int i = 0; i < this.Controls.Count; i++)
            {
                this.Controls[i].State = Control.ControlState.None;

                if (this.Controls[i].CheckHovered(mouseState))
                {
                    this.Controls[i].State = Control.ControlState.IsHovered;
                    this.Id = i;
                    break;
                }

                if (this.Controls[i].CheckClicked(mouseState))
                {
                    GameEntity[] revs = new GameEntity[1];
                    revs[0] = this;
                    this.Controls[i].State = Control.ControlState.IsClicked;
                    Global.BroadCastEvents(Global.EVENTS.GM_GAMESCREEN_MAINMEN_BUTTON_CLICKED, 
                                          this.Controls[i], null, revs);
                }

            }
        }

        public override int OnEvent(Global.EVENTS eventID, object sender, object[] args)
        {
            int kq = 0;
            switch (eventID)
            {
                case Global.EVENTS.GM_GAMESCREEN_MAINMEN_BUTTON_CLICKED:
                    {
                        Button btn = (Button)sender;
                        switch (btn.Name)
                        {
                            case "NewGame":
                                {
                                    kq = 1;
                                    break;
                                }
                            case "Option":
                                {
                                    kq = 1;
                                    break;
                                }
                            case "Quit":
                                {
                                    kq = 1;
                                    break;
                                }
                            default:
                                break;
                        }
                    }
                    break;
                default:
                    break;
            }

            return kq;
        }
        
       
    }
}
